package com.cskaoyan.javase.network._1udp._v2;

import com.cskaoyan.javase.network.util.UDPNetworkUtils;

import java.io.IOException;
import java.net.DatagramPacket;
import java.net.DatagramSocket;

/**
 * 接收端
 *
 * 注意事项:
 *      1.UDP是无连接的,谁先启动都无所谓.当然为了确保接收端能够接收数据,要先启动接收端
 *      2.(重点)接收端的receive方法是一个阻塞方法,它会持续监听一个端口号,等待发送端发送数据
 *          只有接收到数据,接收端才会继续运行
 *
 * @since 10:48
 * @author wuguidong@cskaoyan.onaliyun.com
 */
public class Receiver {
    public static void main(String[] args) throws IOException {
        // 1.创建接收端套接字对象,DatagramSocket对象,必须明确指出ip地址和端口号
        DatagramSocket receiverSocket = new DatagramSocket(9527);

        // 2.创建一个新的byte数组,用于接收数据报包封装的字节数据
        DatagramPacket receiverPacket = UDPNetworkUtils.getReceiverPacket();

        // 3.用DatagramSocket对象的成员方法-receive方法,接收数据报包
        receiverSocket.receive(receiverPacket);

        // 4.解包,解析出发送端发送的数据
        System.out.println(UDPNetworkUtils.parsePacket(receiverPacket));

        // 5.close关闭资源
        receiverSocket.close();
    }
}
